/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package model.dao;

import lib.*;
import model.dao.vo.*;

import java.sql.*;
import java.util.*;

/**
 *
 * @author felipe
 */
public class PedidoDAO extends DAO
{

    public PedidoDAO()
    {
        super();
    }

    public PedidoVO buscaPedido(PedidoVO pedido)
    {
        SQL sql = Factory.createSQL();
        sql = sql.select("pedido_id, usuario_id, pedido_qtde, pedido_valor, pedido_status")
                .from("pedido")
                .where("pedido_id = " + pedido.getId());
        ResultSet rs = this.db.Execute(sql.toString());
        try
        {
            if ( ! rs.wasNull() )
            {
                pedido.setId(rs.getInt("pedido_id"));
                UsuarioDAO usuarioDAO = new UsuarioDAO();
                UsuarioVO usuarioVO = new UsuarioVO();
                usuarioVO.setId(rs.getInt("usuario_id"));
                usuarioVO = usuarioDAO.buscaUsuario(usuarioVO);
                pedido.setUsuario(usuarioVO);
                pedido.setQtde(rs.getInt("pedido_qtde"));
                pedido.setValor(rs.getFloat("usuario_valor"));
                return pedido;
            }
        }
        catch( SQLException e )
        {
            ErrorLog.SQLLog("Error buscaPedido method " , e);
        }
        return null;
    }

    public Iterator<PedidoVO> listaPedido(UsuarioVO usuario)
    {
        SQL sql = Factory.createSQL();
        sql = sql.select("pedido_id, usuario_id, pedido_qtde, pedido_valor, pedido_status")
                .from("pedido")
                .where("usuario_id = " + usuario.getId());
        ResultSet rs = this.db.Execute(sql.toString());
        try
        {
            if ( ! rs.wasNull() )
            {
                List<PedidoVO> pedidos = new ArrayList<PedidoVO>();
                while(rs.next())
                {
                    PedidoVO pedido = new PedidoVO();
                    pedido.setId(rs.getInt("pedido_id"));
                    pedido.setUsuario(usuario);
                    pedido.setQtde(rs.getInt("pedido_qtde"));
                    pedido.setValor(rs.getFloat("usuario_valor"));
                    pedido.setStatus(rs.getInt("pedido_status"));
                    pedidos.add(pedido);
                }
                if ( ! pedidos.isEmpty() ){
                    return (Iterator<PedidoVO>)pedidos.iterator();
                }
            }
        }
        catch( SQLException e )
        {
            ErrorLog.SQLLog("Error buscaPedido method " , e);
        }
        return null;
    }

    public boolean inserePedido(PedidoVO pedido)
    {
        SQL sql = Factory.createSQL();
        sql = sql.insert()
                .into("pedido", "pedido_id, usuario_id, pedido_qtde, pedido_valor, pedido_status")
                .value("NULL, " + pedido.getUsuario().getId() + ", " + pedido.getQtde()+ ", " + pedido.getValor() + ", " + pedido.getStatus() );
        int sucess = this.db.Update(sql.toString());
        if (sucess == 1)
        {
            return true;
        }
        return false;
    }

    public boolean alteraPedido(PedidoVO pedido)
    {
        SQL sql = Factory.createSQL();
        sql = sql.update("pedido")
                .set("pedido_valor = " + pedido.getValor())
                .nset("pedido_qtde = " + pedido.getQtde())
                .nset("pedido_status = " + pedido.getStatus())
                .nset("usuario_id = " + pedido.getUsuario().getId())
                .where("pedido_id = " + pedido.getId());
        int sucess = this.db.Update(sql.toString());
        if (sucess == 1)
        {
            return true;
        }
        return false;
    }

    public boolean apagaPedido(PedidoVO pedido)
    {
        SQL sql = Factory.createSQL();
        sql = sql.delete("pedido")
                .where("pedido_id = " + pedido.getId());
        int sucess = this.db.Update(sql.toString());
        if (sucess == 1)
        {
            return true;
        }
        return false;
    }

}